package com.qf.factory;

/**
 * @author mkr
 * @version V1.0
 * @Project java2203-mkr
 * @Package com.qf.factory
 * @Description:
 * @Date 2022/6/2 10:12
 */

import java.io.IOException;
import java.util.Properties;

/**
 * 自定义bean工厂
 */

public class MyBeanFactory {
    private Properties properties = new Properties();

    /**
     * 无参构造
     */
    public MyBeanFactory() {
    }

    /**
     * 有参构造
     * @param config 配置文件的名字
     */
    public MyBeanFactory(String config) throws IOException {
        //通过输入流获取配置文件的名字和路径，读取配置文件到properties对象中
        properties.load(MyBeanFactory.class.getResourceAsStream(config));

    }

    /**
     * 获取java类对象，就是javaBean对象，对象由工厂产生
     */
    public Object getBean (String beanName) throws ClassNotFoundException ,IllegalAccessException,
            InstantiationException {
        //1、获取类的路径
        String classPath = properties.getProperty(beanName);
        //2、判断这个路径是否为空，如果不为空再用反射获取类的对象
        if (classPath != null){
            //3、如果不为空，使用反射加载类的对象
            Class clazz = Class.forName(classPath);
            //4、获取对象的实例返回
            return clazz.newInstance();
        }
        //5、如果为空返回null
        return null;
    }

//    public static void main(String[] args) throws Exception {
//        //创建工厂类对象
//        MyBeanFactory factory = new MyBeanFactory("/bean.properties");
//        //从工厂类中获取对象
//        UserDao userDao = (UserDao) factory.getbean("userDao");
//
//
//    }

}
